Amazon Managed Grafanaでワークスペースの管理者の割り当てをオプトアウトにする
こんにちは。CX事業本部Delivery部のakkyです。
Amazon Managed GrafanaでSAML認証を行うとき、「管理者ロールの値」を入力せず、「ワークスペースへの管理者の割り当てをオプトアウトしたいと考えています。」(I want to opt-out of assigning admins to my workspace.)にチェックを入れると、SAML IdPから来る値で管理者を設定せず、Amazon managed Grafana側で管理者を設定することができます。
ただし、管理者を設定する作業はWebコンソールからは行えず、AWS CLIとGrafana HTTP APIを使用する必要があります。 今回は、この手順をご紹介します。
API Keyの取得
まず、Grafana HTTP APIを使用するためにAPI Keyを取得します。この作業にはAWS CLIが必要です。
- key-nameはAWS CLIでAPI Keyを区別するためだけに使用する名前です。
- key-rokeは、他のユーザーの権限を設定するため、ADMINにします。
- seconds-to-liveはAPI Keyの有効期限ですので、なるべく短くします。
- workspace-idはワークスペースIDです。GrafanaのURLがhttps://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/の場合、g-XXXXXXXの部分を指定してください。
aws grafana create-workspace-api-key --key-name "adminkey" --key-role "ADMIN" --seconds-to-live 3600 --workspace-id "g-XXXXXXX"
以下のような応答が返ります。このうち、keyがAPI Keyです。
{ "key": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "keyName": "adminkey", "workspaceId": "g-XXXXXXX" }
ユーザーロールの設定
では実際にGrafana HTTP APIでユーザーロールを設定します。 まずはユーザーIDを取得するため、ユーザーの一覧を表示します。Authorizationヘッダに先ほど取得したAPI Keyを設定して呼び出します。 応答はjsonなので、jqで成形しています。
curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" https://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/api/org/users/ | jq
以下のような応答が返ります。このうち、設定に使うのはuserIdの番号となりますので、設定を変えたいユーザーの情報を探しておきます。今回はa-sanを管理者にしたいので、2ということになります。
[ { "orgId": 1, "userId": 2, "email": "[email protected]", "name": "a-san", "avatarUrl": "/public/img/user_profile.png", "login": "[email protected]", "role": "Editor", "lastSeenAt": "2022-10-11T08:44:04Z", "lastSeenAtAge": "2 minutes" }, { "orgId": 1, "userId": 4, "email": "[email protected]", "name": "b-san", "avatarUrl": "/public/img/user_profile.png", "login": "[email protected]", "role": "Viewer", "lastSeenAt": "2022-10-11T07:45:14Z", "lastSeenAtAge": "1 hour" } ]
次に実際にロールを変更するコマンドを送信します。API Keyを同様に指定し、ユーザーIDをURLの最後(/api/org/users/ユーザーID)に指定し、ロールはペイロードにjsonで指定します。Admin, Editor, Viewerが設定できます。このとき、値はケースセンシティブなので注意してください。(先頭を大文字にしないエラーになってしまいます。)
curl -X PATCH -H "Content-Type: application/json" -H "Authorization: Bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" -d '{"role":"Editor"}' https://g-XXXXXXX.grafana-workspace.ap-northeast-1.amazonaws.com/api/org/users/2 | jq
次のような応答が得られれば成功です。
{ "message": "Organization user updated" }